package demo.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

/*
* 有序版本
* */
public class DouDiZhu2 {
    public static void main(String[] args) {
        //1,准备牌
        //创建一个Map集合，存储牌的索引和组装好的牌
        HashMap<Integer,String> poker =new HashMap<>();

        //创建一个list集合存储牌的索引
        ArrayList<Integer> pokerIndex = new ArrayList<>();

        //定义两个集合，存储牌的花色和牌的序号
        String[] colors ={"♠","♥","♣","♦"};
        String[] numbers ={"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

        //把大王，小王存到集合中
        int index = 0;
        poker.put(index,"大王");
        pokerIndex.add(index);
        index++;

        poker.put(index,"小王");
        pokerIndex.add(index);
        index++;

        //循环遍历两个集合，组装牌
        for (String number: numbers) {
            for (String color: colors) {
                poker.put(index,color+number);
                pokerIndex.add(index);
                index++;
            }
        }
//        System.out.println(poker);

        /*
        * 2.洗牌
        * 使用Collection中的方法shuffle（List）
        * */
        Collections.shuffle(pokerIndex);
        System.out.println(pokerIndex);

        /*
        * 3.发牌
        *   定义4个集合，存储玩家牌的索引和底牌的索引
        * */
        ArrayList<Integer> player01 =new ArrayList<>();
        ArrayList<Integer> player02 =new ArrayList<>();
        ArrayList<Integer> player03 =new ArrayList<>();
        ArrayList<Integer> dipai =new ArrayList<>();
        //遍历存储牌索引的List集合，获取每一个牌的索引
        for (int i = 0; i <pokerIndex.size() ; i++) {
            Integer in =pokerIndex.get(i);
            //先判断底牌
            if (i > 51) {
                dipai.add(in);
            }else if (i%3==0){
                player01.add(in);
            }else if (i%3==1){
                player02.add(in);
            }else if (i%3==2){
                player03.add(in);
            }
        }
        /*
        * 4.排序
        * 使用 Collections中的sort（List）
        *   sort默认升序
        * */
        Collections.sort(player01);
        Collections.sort(player02);
        Collections.sort(player03);
        Collections.sort(dipai);

        /*
        * 调用看牌的方法
        * */
        lookPoker("111",poker,player01);
        lookPoker("222",poker,player02);
        lookPoker("333",poker,player03);
        lookPoker("444",poker,dipai);
    }
    /*
     * 5.看牌
     *  定义一个看牌的方法
     *   参数：
     *       String name:
     *       HashMap<Integer,String> poker :存储牌的poker集合
     *       ArrayList<Interger> List: 存储玩家和底牌的List集合
     *   查表法：
     *       遍历玩家或者底牌集合，获取索引
     *       使用索引，去Map集合，找到对应的牌
     * */
    public static void lookPoker(String name,HashMap<Integer,String> poker,ArrayList<Integer> list){
        //输出玩家名称
        System.out.print(name+": ");
        for (Integer key:list) {
            String value =poker.get(key);
            System.out.print(value+" ");
        }
        System.out.println();
    }
}
